/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package fisica;

import hibernate.Sesion;

import hibernate.objeto.Usuario;
import java.util.Vector;
import org.hibernate.Query;
import presentacion.utilidad.Paginador;

/**
 *
 * @author Rafael
 */
public class UsuarioFisica extends CapaFisica {

    /**
     * Retorna el objeto Usuario según el id.
     *
     * @param idUsuario El id del usuario
     * @return El objeto Usuario consultado, null si no existe
     */
    public static Usuario getUsuarioPorId(int idUsuario) {
        Query q = Sesion.sesion.createQuery(
                "from Usuario " +
                "where idUsuario = " + idUsuario
                );

        return (Usuario) getObjeto(q);
    }

    /**
     * Retorna el objeto usuario según el número de documento y el estado.
     *
     * @param numeroDocumento El número de documento
     * @param estado false si es baja lógica, true si aún activo
     * @return El vector de objetos Usuario consultado, null si no existe
     */
    public static Vector<Usuario> getVectorUsuarioPorNumeroDocumentoYPorEnBd(
            String numeroDocumento, boolean estado) {
        Query q = Sesion.sesion.createQuery(
                "from Usuario u " +
                "where u.persona.numeroDeDocumentoPersona like '%" + numeroDocumento + "%' and " +
                "u.enBdUsuario = " + estado
                + " order by u.persona.numeroDeDocumentoPersona asc"
                );

        Paginador.paginar(q);

        return getVectorObjetos(q);
    }

    /**
     * Retorna el vector de objetos usuario según el apellido y el estado.
     *
     * @param apellido El apellido del usuario
     * @param estado false si es baja lógica, true si aún activo
     * @return El vector de objetos Usuario consultado, null si no existe
     */
    public static Vector<Usuario> getVectorUsuarioPorApellidoYPorEnBd(
            String apellido, boolean estado) {
        Query q = Sesion.sesion.createQuery(
                "from Usuario u " +
                "where lower(sinacentos(u.persona.apellidoPersona)) like " +
                "lower(sinacentos('%" + apellido + "%')) " + "and " +
                "u.enBdUsuario = " + estado
                + " order by u.persona.apellidoPersona asc"
                );

        Paginador.paginar(q);

        return getVectorObjetos(q);
    }

    /**
     * Retorna el objeto Usuario según el tipo y número de documento.
     *
     * @param tipo El tipo de documento
     * @param numero El número de documento
     * @param estado false si es baja lógica, true si aún activo
     * @return El objeto Usuario consultado, null si no existe
     */
    public static Usuario getUsuarioPorDocumentoYPorEnBd(String tipo, String numero,
            boolean estado) {
        Query q = Sesion.sesion.createQuery(
                "from Usuario u " +
                "where lower(u.persona.tipoDeDocumentoPersona) = lower('" + tipo + "') and " +
                "u.persona.numeroDeDocumentoPersona = '" + numero + "' and " +
                "u.enBdUsuario = " + estado
                );

        return (Usuario) getObjeto(q);
    }

    /**
     * Retorna el objeto Usuario según el nombre de usuario.
     *
     * @param nombreDeUsuario El número de documento
     * @param estado false si es baja lógica, true si aún activo
     * @return El objeto Usuario consultado, null si no existe
     */
    public static Usuario getUsuarioPorNombreDeUsuarioYPorEnBd(String nombreDeUsuario,
            boolean estado) {
        Query q = Sesion.sesion.createQuery(
                "from Usuario u " +
                "where u.nombreDeUsuarioUsuario = '" + nombreDeUsuario + "' and " +
                "u.enBdUsuario = " + estado
                );

        return (Usuario) getObjeto(q);
    }

    /**
     * Retorna un usuario por correo electrónico en la base de datos.
     *
     * @param correoElectronico El correo electrónico del usuario
     * @param estado false si es baja lógica, true si aún activo
     * @return El objeto Usuario consultado, null si no existe
     */
    public static Usuario getUsuarioPorCorreoElectronicoEnBd(
            String correoElectronico, boolean estado) {
        Query q = Sesion.sesion.createQuery(
                "from Usuario u " +
                "where lower(u.persona.correoElectronicoPersona) = " +
                "lower('" + correoElectronico + "') and " +
                "u.enBdUsuario = " + estado
                );

        return (Usuario) getObjeto(q);
    }

}
